import re


class RegexMatcher:
    # 预定义正则模式
    PATTERNS = {
        'order_query': [
            r'订单[：:]*\s*([A-Z]{3}\d+)',  # 订单：ORD123
            r'订单号\s*([A-Z]{3}\d+)',  # 订单号 ORD123
            r'单号\s*([A-Z]{3}\d+)',  # 单号 ORD123
            r'\b(ORD\d{3})\b',  # 单独输入ORD001
            r'查询订单[：:]*\s*([A-Z]{3}\d+)',  # 查询订单：ORD123
            r'查看订单[：:]*\s*([A-Z]{3}\d+)'  # 查看订单：ORD123
        ],
        'product_query': [
            r'产品\s*([A-Z]\d+)',  # 产品 P001
            r'商品\s*([A-Z]\d+)',  # 商品 P001
            r'货号\s*([A-Z]\d+)',  # 货号 P001
            r'\b([A-Z]\d{3})\b'  # 单独输入P001
            r'(净肌|特安|多元)\w+'
            r'((.*)乳|乳液|乳霜|面霜|精华|水|爽肤水|面膜|洗面奶|卸妆|卸妆膏|凝露(.*))',  # 包含常见产品别称
        ],
        'after_sales_query': [
            r'退货\s*订单\s*([A-Z]{3}\d+)',  # 退货订单 ORD123
            r'退款\s*订单\s*([A-Z]{3}\d+)',  # 退款订单 ORD123
            r'换货\s*订单\s*([A-Z]{3}\d+)'  # 换货订单 ORD123
            r'(售后|退货|退款|换货|质量(问题|不好)|不满意|投诉)'
        ],
        'address_query': [
            r'修改地址[：:]*\s*(.+)',  # 修改地址：新地址信息
            r'地址修改[：:]*\s*(.+)',  # 地址修改：新地址信息
            r'更新地址[：:]*\s*(.+)'  # 更新地址：新地址信息
        ],
        'product_usage': [
            r'(怎么用|使用方法|用法|使用方式|如何用)(.*)',
            r'(.*)的使用(方法|说明)'
        ],
        'product_skin_type': [
            r'(推荐|适合|适合用|用什么)(.*)(产品|商品|护肤品|化妆品)',
            r'(.*)(肤质|皮肤|油皮|干皮|混合肌)用(什么|哪个|哪款)',
            r'(适合|适用)(.*)(肤质|皮肤|油皮|干皮|敏感肌|混合肌)'
        ],
        'product_series': [
            r'(属于|是)(.*)(系列|系列名称)',
            r'(系列名称|系列|名称)(.*)'
        ],
        'product_ingredients': [
            r'(.*)(成分|主要成分|主要材料|主要材料|主要)(.*)'
        ],
        'product_effect': [
            r'(.*)(效果|作用|用途|功能)(.*)'
        ]
    }

    @staticmethod
    def match(text):
        """使用正则匹配文本"""
        entities = {}
        matched_intent = None

        # 尝试匹配所有预定义模式
        for intent, patterns in RegexMatcher.PATTERNS.items():
            for pattern in patterns:
                match = re.search(pattern, text)
                if match:
                    matched_intent = intent
                    # 提取实体
                    if intent == 'order_query':
                        entities['order_id'] = match.group(1)
                    elif intent == 'product_query':
                        entities['product_id'] = match.group(1)
                    elif intent == 'after_sales_query':
                        entities['order_id'] = match.group(1)

                    break
            if matched_intent:
                break

        return matched_intent, entities